package InterfaceGraphique;

import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import Principal.AucunUtilisateurException;

/**
 * classe codant la fenetre ou seront les infos relatives au graphe
 * @author bruno
 *
 */
public class FenetreVisualisation extends Fenetre {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * bouton permettant de revenir au menu
	 * @see JButton
	 */
	private JButton button1 = new JButton("Retour");
	
	/**
	 * constructeur de la fenetre
	 */
	public FenetreVisualisation(){
		
		Test.disable();
		
		this.setTitle("Votre Graphe");
		this.setSize(800, 400);
		this.setResizable(true);
		this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		this.setVisible(true);
		this.setLocationRelativeTo(null);
		
		button1.addActionListener(this);
		
		Test.g.calculPageRank();
		JLabel label1 = new JLabel("-Nombre de sommets : "+Test.g.getNbSommet());
		JLabel label2 = new JLabel("-Nombre d'arcs : "+Test.g.getNbArc());
		JLabel label3 = new JLabel("-Liste des Arcs : "+Test.g.getListeArc().toString());
		JLabel label10 = new JLabel("-Liste des Pages : "+Test.g.getListPage().toString());
		JLabel label4 = new JLabel("-Liste des sommets tries par nom : "+Test.g.getListSommetTrieParNom().toString());
		JLabel label5 = new JLabel("-Liste des sommets tries par nombres de voisins sortants : "+Test.g.getListSommetTrieParNbVoisinSortant().toString());
		JLabel label6 = new JLabel("-Nombre de pages : "+Test.g.getNbPage());
		JLabel label7 = new JLabel("-Nombre de d'utilisateurs : "+Test.g.getNbUtilisateur());
		String string_for_label_eight = "";
		try{
			string_for_label_eight = "-Age moyen : "+Test.g.ageMoyen(); //lève une exception
		}
		catch(AucunUtilisateurException e){}
		JLabel label8 = new JLabel(string_for_label_eight);
		JLabel label9 = new JLabel("-Administrateurs : "+Test.g.getCompteUtilisateurAdministrateur().toString());
		int distance = Test.g.distanceMonde();
		JLabel label11;
		if(distance==10000000){
			label11 = new JLabel("-Distance la plus grande entre deux sommets : il y a deux sommets qui n'ont aucune relation entre eux");
		}
		else{
			label11 = new JLabel("-Distance la plus grande entre deux sommets : "+Test.g.distanceMonde());
		}
		
		Font my_font = new Font(label1.getFont().getFontName(), 1 , 16);
		label1.setFont(my_font);
		label2.setFont(my_font);
		label3.setFont(my_font);
		label4.setFont(my_font);
		label5.setFont(my_font);
		label6.setFont(my_font);
		label7.setFont(my_font);
		label8.setFont(my_font);
		label9.setFont(my_font);
		label10.setFont(my_font);
		label11.setFont(my_font);
		
		JPanel main_container = new JPanel();
		main_container.setLayout(new GridBagLayout());
		
		GridBagConstraints gbc = new GridBagConstraints();
		
		//on précise le placement du premier composant sur le container
		gbc.gridx = 0;
		gbc.gridy = 0;
		//on précise la taille des composants par rapport à la grille 
		gbc.gridheight = 1;
		gbc.gridwidth = 1;
		gbc.ipady = 15;
		gbc.anchor = GridBagConstraints.WEST;
		
		main_container.add(label1, gbc);
		
		gbc.gridy = 1;
		main_container.add(label2, gbc);
		
		gbc.gridy = 2;
		main_container.add(label3, gbc);
		
		gbc.gridy = 3;
		main_container.add(label10, gbc);
		
		gbc.gridy = 4;
		main_container.add(label4, gbc);
		
		gbc.gridy = 5;
		main_container.add(label5, gbc);
		
		gbc.gridy = 6;
		main_container.add(label6, gbc);
		
		gbc.gridy = 7;
		main_container.add(label7, gbc);
		
		gbc.gridy = 8;
		main_container.add(label8, gbc);
		
		gbc.gridy = 9;
		main_container.add(label9, gbc);
		
		gbc.gridy = 10;
		main_container.add(label11, gbc);
		
		gbc.ipady = 0;
		gbc.gridy = 0;
		gbc.weightx = 1;
		gbc.weighty = 1;
		gbc.fill = GridBagConstraints.BOTH;
		JScrollPane jsp = new JScrollPane(main_container);
		this.setLayout(new GridBagLayout());
		this.getContentPane().add(jsp, gbc);
		gbc.gridy = 1;
		gbc.weightx = 0;
		gbc.weighty = 0;
		this.getContentPane().add(button1, gbc);
		
	}
	
		
	/**
	 * Méthode qui définit ce que le programme fera en fonction du boutons cliqués
	 * @param e l'action dont on peut récupérer la source vie e.getSource()
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == button1){
			Test.reEnable();
			this.dispose();
		}
	}

}
